package cn.starlightsoftware.sherly.db.model.permission;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import cn.starlightsoftware.sherly.enums.BooleanEnum;
import cn.starlightsoftware.sherly.enums.PermissionTypeEnum;
import cn.starlightsoftware.sherly.enums.UsableEnum;
import cn.starlightsoftware.sherly.model.BaseModel;

/**
 * @author 谷子毅
 * @date 2024/4/27
 */
@Data
@TableName("sys_permission")
public class PermissionDO extends BaseModel {

    /** 权限编号 */
    @TableId(type = IdType.ASSIGN_ID)
    private String permissionId;

    /** 父权限编号 */
    private String parentId;

    /** 权限名称 */
    private String permissionName;

    /** 权限代码 */
    private String permissionCode;

    /** 图标 */
    private String icon;

    /** 组件地址 */
    private String componentPath;

    /** 组件名称 */
    private String componentName;

    /** 路由地址 */
    private String path;

    /** 排序 */
    private Integer sort;

    /** 权限类型 */
    private PermissionTypeEnum permissionType;

    /** 可用性 */
    private UsableEnum usable;

    /**
     * 显示状态
     * 只有目录和菜单使用
     * 当设置为 true，该菜单不会展示在侧边栏，但是路由还是存在。例如说，一些独立的编辑页面 /edit/1024 等等
     */
    private BooleanEnum visible;

    /**
     * 总是显示
     * 如果为 false，当该菜单只有一个子菜单时，不展示自己，直接展示子菜单
     */
    private BooleanEnum alwaysShow;

    /**
     * 缓存状态
     * 只有目录和菜单使用，否使用 Vue 路由的 keep-alive 特性
     * 注意：如果开启缓存，则必须填写 componentName，否则无法缓存
     */
    private BooleanEnum keepAlive;
}
